Imports System.Data.SqlClient
Imports System.ComponentModel

Public Class cls_mensajero_

    Implements ICloneable

#Region "Variables ..."
    Private int_idmensajero As Integer = 0
    Private int_idusuario As Integer = 0
    Private int_estado As enu_estado = enu_estado.Desconectado
    Private dte_fecha As DateTime = New System.DateTime(Now.Year, 1, 1)
    Private bit_pendientes As Boolean = False
    Private int_Mpendientes As Integer
    Private xtf_ABMmensajeromensaje As xtf_ABMmensajeromensaje

    Private obj_usuario As cls_usuario_ = Nothing

    Private col_Items As Collections.Generic.List(Of cls_mensajero_) = Nothing

    Public Enum enu_estado
        <Description("(Desconectado)")> Desconectado = 0
        <Description("(Conectado)")> Conectado = 1
        <Description("(Ausente)")> Ausente = 2
        <Description("(Ocupado)")> Ocupado = 3
    End Enum
#End Region

#Region "Propiedades ..."
    ReadOnly Property This
        Get
            Return Me
        End Get
    End Property
    ReadOnly Property ThisDescripcion As String
        Get
            Return Me.ToString
        End Get
    End Property
    ReadOnly Property pKey
        Get
            Return idmensajero
        End Get
    End Property
    Property idmensajero() As Integer
        Get
            idmensajero = int_idmensajero
        End Get
        Set(ByVal value As Integer)
            int_idmensajero = value
        End Set
    End Property
    Property idusuario() As Integer
        Get
            idusuario = int_idusuario
        End Get
        Set(ByVal value As Integer)
            int_idusuario = value
        End Set
    End Property
    Property estado() As enu_estado
        Get
            estado = int_estado
        End Get
        Set(ByVal value As enu_estado)
            int_estado = value
        End Set
    End Property
    Property fecha() As DateTime
        Get
            fecha = dte_fecha
        End Get
        Set(ByVal value As DateTime)
            dte_fecha = value
        End Set
    End Property
    Property pendientes() As Boolean
        Get
            pendientes = bit_pendientes
        End Get
        Set(ByVal value As Boolean)
            bit_pendientes = value
        End Set
    End Property
    Property Mpendientes As Integer
        Get
            Mpendientes = int_Mpendientes
        End Get
        Set(ByVal value As Integer)
            int_Mpendientes = value
        End Set
    End Property
    Property usuario() As cls_usuario_
        Get
            If IsNothing(obj_usuario) Then
                obj_usuario = New cls_usuario_
                If Not obj_usuario.Buscar(idusuario) Then
                    obj_usuario = Nothing
                End If
            End If
            usuario = obj_usuario
        End Get
        Set(ByVal value As cls_usuario_)
            obj_usuario = value
        End Set
    End Property
    Property ABMmensajeromensaje As xtf_ABMmensajeromensaje
        Get
            ABMmensajeromensaje = xtf_ABMmensajeromensaje
        End Get
        Set(ByVal value As xtf_ABMmensajeromensaje)
            xtf_ABMmensajeromensaje = value
        End Set
    End Property


    Property Items() As Collections.Generic.List(Of cls_mensajero_)
        Get
            Items = col_Items
        End Get
        Set(ByVal value As Collections.Generic.List(Of cls_mensajero_))
            col_Items = value
        End Set
    End Property
#End Region

    Private Sub CargarColeccion(ByVal obj_Reader As SqlDataReader)
        col_Items = New Collections.Generic.List(Of cls_mensajero_)
        While obj_Reader.Read()
            Dim Elemento As New cls_mensajero_
            Elemento.int_idmensajero = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idmensajero")))

            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuario"))) = False Then
                Elemento.int_idusuario = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuario")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("estado"))) = False Then
                Elemento.int_estado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("estado")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fecha"))) = False Then
                Elemento.dte_fecha = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fecha")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("pendientes"))) = False Then
                Elemento.bit_pendientes = (obj_Reader.GetValue(obj_Reader.GetOrdinal("pendientes")))
            End If
            If obj_Reader.GetOrdinal("Mpendientes") <> 0 Then
                Elemento.int_Mpendientes = (obj_Reader.GetValue(obj_Reader.GetOrdinal("Mpendientes")))
            End If
            col_Items.Add(Elemento)
        End While
    End Sub

    Private Sub CargarVariables(ByVal obj_Reader As SqlDataReader)
        obj_Reader.Read()
        int_idmensajero = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idmensajero")))

        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuario"))) = False Then
            int_idusuario = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuario")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("estado"))) = False Then
            int_estado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("estado")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fecha"))) = False Then
            dte_fecha = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fecha")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("pendientes"))) = False Then
            bit_pendientes = (obj_Reader.GetValue(obj_Reader.GetOrdinal("pendientes")))
        End If
    End Sub

    Public Function Nuevo(Optional ByVal ObtenerID As Boolean = False) As Boolean
        Nuevo = False
        Dim obj_Conexion As New cls_Conexion
        Nuevo = False
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "mensajero__Nuevo"
                .Parameters.Add("@idusuario", SqlDbType.Int).Value = int_idusuario
                .Parameters.Add("@estado", SqlDbType.Int).Value = int_estado
                .Parameters.Add("@fecha", SqlDbType.DateTime).Value = dte_fecha
                .Parameters.Add("@pendientes", SqlDbType.Bit).Value = bit_pendientes
                .ExecuteNonQuery()
            End With
            Nuevo = True
            If ObtenerID Then
                CargarUltimo()
            End If
            Nuevo = True
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Crear el registro de mensajero_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Function

    Public Function Modificar() As Boolean
        Dim obj_Conexion As New cls_Conexion
        Modificar = False
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "mensajero__Modificar"
                .Parameters.Add("@idmensajero", SqlDbType.Int).Value = int_idmensajero
                .Parameters.Add("@idusuario", SqlDbType.Int).Value = int_idusuario
                .Parameters.Add("@estado", SqlDbType.Int).Value = int_estado
                .Parameters.Add("@fecha", SqlDbType.DateTime).Value = dte_fecha
                .Parameters.Add("@pendientes", SqlDbType.Bit).Value = bit_pendientes
                .ExecuteNonQuery()
            End With
            Modificar = True
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Modificar el registro de mensajero_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Function

    Public Sub Eliminar(ByVal idmensajero As Integer)
        Dim obj_Conexion As New cls_Conexion
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "mensajero__Eliminar"
                .Parameters.Add("@idmensajero", SqlDbType.Int).Value = idmensajero
                .ExecuteNonQuery()
            End With
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Eliminar el registro de mensajero_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Function Buscar(ByVal idmensajero As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            Buscar = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "mensajero__Buscar"
                .Parameters.Add("@idmensajero", SqlDbType.Int).Value = idmensajero
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
                Buscar = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Buscar el registro de mensajero_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function BuscarXidusuario(ByVal prm_idusuario As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            BuscarXidusuario = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "mensajero__BuscarXidusuario"
                .Parameters.Add("@idusuario", SqlDbType.Int).Value = prm_idusuario
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
                BuscarXidusuario = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al BuscarXidusuario el registro de mensajero_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Sub CargarUltimo()
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "mensajero__CargarUltimo"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarUltimo registro de mensajero_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Sub

    Public Function CargarTodos() As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            CargarTodos = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "mensajero__CargarTodos"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                CargarTodos = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarTodos los registros de mensajero_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function CargarConectados() As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            CargarConectados = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "mensajero__CargarConectados"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                CargarConectados = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarConectados los registros de mensajero_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function Iniciar(ByVal prm_idusuario As Integer, ByVal prm_estado As enu_estado) As Boolean
        Iniciar = False
        If BuscarXidusuario(prm_idusuario) Then
            estado = prm_estado
            fecha = Now
            If Modificar() Then
                Iniciar = True
            End If
        Else
            estado = prm_estado
            idusuario = prm_idusuario
            fecha = Now
            If Nuevo(True) Then
                Iniciar = True
            End If
        End If
    End Function

    Public Function Actualizar() As Boolean
        Actualizar = False
        If idmensajero <> 0 Then
            Dim obj_Conexion As New cls_Conexion
            Dim obj_Reader As SqlDataReader
            Actualizar = False
            Try
                obj_Conexion.Conectar()
                With obj_Conexion.obj_SqlCommand
                    .CommandType = CommandType.StoredProcedure
                    .Connection = obj_Conexion.obj_SqlConnection
                    .CommandText = "mensajero__Actualizar"
                    .Parameters.Add("@estado", SqlDbType.Int).Value = int_estado
                    .Parameters.Add("@idmensajero", SqlDbType.Int).Value = int_idmensajero
                End With
                obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
                If obj_Reader.HasRows Then
                    CargarColeccion(obj_Reader)
                    Actualizar = True
                End If
            Catch ex As SqlClient.SqlException
                Throw New Exception("Error al Actualizar el registro de mensajero_." & Chr(13) & _
               "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
               "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
               "Descripción: " & ex.Message)
            Finally
                obj_Conexion.Desconectar()
                obj_Conexion = Nothing
            End Try
        End If
    End Function

    Public Function Clone() As Object Implements System.ICloneable.Clone
        Dim obj_mensajero_Clon As New cls_mensajero_
        obj_mensajero_Clon.int_idmensajero = Me.int_idmensajero
        obj_mensajero_Clon.int_idusuario = Me.int_idusuario
        obj_mensajero_Clon.int_estado = Me.int_estado
        obj_mensajero_Clon.dte_fecha = Me.dte_fecha
        obj_mensajero_Clon.bit_pendientes = Me.bit_pendientes
        obj_mensajero_Clon.col_Items = Me.col_Items
        Return obj_mensajero_Clon
    End Function

End Class
